define(function (require) {
    $ && $(function () {
        require('jquery-validate');
        require('jquery-metadata');

        var $form = $('form'), $email = $('#email'), $newEmail = $('#new_email'), $pwd = $('#password'),
            $btnSubmit = $('#btnSubmit');

        var validator = $form.validate({
            rules:{
                new_email:{
                    remote:{ type:"post", url:"?r=email/exists", dataType:"html",
                        data:{
                            // NOTE:
                            // 1. 这里必须用function的方式设置值,而不能直接使用$newEmail进行赋值(因为那样传过去
                            // 的值将是页面首次加载后的表单值,不会变化)
                            // 2. remote的时候会自动将该配置项的key(new_email)传给服务器,由于exists action中
                            // 必须取$_POST['email'],所以此处要设置一个key为email的值Post到服务器
                            email:function () {
                                return $newEmail.val();
                            }
                        },
                        dataFilter:function (data, type) {
                            // NOTE: 该函数返回true表示的是通过验证
                            // 服务端的true,到客户端会变成字符串"1"
                            return data != "1";
                        }
                    }
                }
            },
            messages:{
                email:{
                    required:'你当前的邮箱地址必须填写'
                },
                password:{
                    required:'密码还没填呢!'
                },
                new_email:{
                    remote:'该名称已被注册',
                    notEqualTo:'要设置的新邮箱地址不能和当前邮箱地址相同'
                }
            },
            errorPlacement:function (error, element) {
                element.after('<i class=＂icon-remove＂>').after(error);
            },
            //表单提交
            submitHandler:function (form) {

                // 设置提交按钮会"状态化的按钮(放重复提交,并且点击后状态发生变化)"
                $btnSubmit.button('loading'); // call the loading function
                setTimeout(function () {
                    $btnSubmit.button('reset'); // call the reset function
                }, 2000);

                // NOTE: 不能用$(form).submit()来提交,那样会触发死循环
                form.submit();
            }
        });
    })
});